現在要開始一些比較枯燥的地方了
要規劃會員系統免不了要稍微講解資料庫
其實資料庫可以很簡單的想成是一個圖書館
裡面存放的資料可以想成是圖書館的書
如果要快速可以找到書(資料), 一定要為書(資料)建立對應的區域(對應表)
要在對應的區域可以快速找到書, 我們需要建立對應表(索引)
資料庫就是這樣
要可以把資料新增/刪除/查詢/修改/建立索引
接下來稍微分析一下一個會員大概需要什麼
可以從上圖看到會員大概需要帳號, 姓名, 文章數, 追蹤與被追蹤人數
但是有些是在其他地方用得到的, 所以簡單歸納幾個
{
"_id": "111", // id
"account": "neil123", // 帳號
"email": "n@abc.com", // 信箱
"name": "Neil", // 姓名
"articleCount": 0, // 文章數
"followedCount": 0, // 被追蹤數
"followCount": 10, // 追蹤數
"permission": "private" // 貼文權限
}
以上是大概規劃出一個會員的結構
結構就是所謂的schema!
稍微介紹一下MongoDB的用法
MongoDB主要有幾個比較需要知道的
簡單介紹幾個常用的MongoDB指令
用程式碼來說明應該更快
以下連接MongoDB, 是使用 MongoDB Native Driver, 也就是MongoDB公司自己出的函式庫
專門讓Node.js跟MongoDB可以連接的函式庫!
// 這個地方之後會詳細解說
// 只要先把db這個物件當成是MongoDB就好了
const db = require('./models');
// 將userData這個變數存放用戶資料(物件)
// 此處不需要_id是因為, _id是你將物件存入MongoDB後, 會自動產生的
let userData = {
"account": "neil123", // 帳號
"email": "n@abc.com", // 信箱
"name": "Neil", // 姓名
"articleCount": 0, // 文章數
"followedCount": 0, // 被追蹤數
"followCount": 10, // 追蹤數
"permission": "private" // 貼文權限
};
// db.collection('user')的意思就是在這個MongoDB內的user表格
// await是Javascript內的一個超級棒的關鍵字, 之後會跟 promise/callback一起講
// 可以先不用在意這個await
// 由此可以很直覺地看出, 底下這行是將user表格中, 插入了一筆資料
await db.collection('user').insertOne(userData);
// 這時候把剛剛塞進去的資料抓出來
// { name: 'Neil' }是查詢條件
// 意思就是幫我從MongoDB內找一個欄位name, 值是Neil字串的資料出來
// findOne是只找一筆資料
// 此時的user會自帶一個_id (ex: ObjectId('59e9d41a9eb2f56e5a220bea'))
// ObjectId是MongoDB預設存放_id的格式
// _id可以想像成是每本書的編號一般的存在
let user = await db.collection('user').findOne({ name: 'Neil' });
// 因為已經有user的編號, 直接針對編號去做修改, 效能會是最好的!
// 另外只要是更新某資料部分的欄位, 第二個參數務必要有 $set
// 更新的傳入參數 update(查詢條件, 要更改的部分)
// 查詢條件可以想像成符合這個條件的都要被更新, 但是因為用了 updateOne
// 所以只會更新一筆!
// $set裡面物件的key值(在此處為name)是資料需要被修改的欄位
// 值(此處是NeilWang字串)是要修改的最新的值
await db.collection('user').updateOne({
_id: ObjectId('59e9d41a9eb2f56e5a220bea')
}, {
$set: {
name: 'NeilWang'
}
});
// 刪除資料庫內所有name是NeilWang字串的資料
await db.collection('user').remove({ name: 'NeilWang' });
如果有點似懂非懂的
我超級推薦去看馬克大大的系列文
其實後端大部分的工作就是新增刪除查詢修改資料庫 (簡單看起來是這樣)
所以看完範例程式碼, 應該沒有想像中困難吧!
明天就是要準備把這些轉成更詳細的程式碼
絕大部分會是用程式碼來講解
我覺得與其抽象的去想像, 不如直接從程式碼看著學最快!
如果有哪部分看不懂的, 歡迎留言, 我會再努力修改
畢竟我還是希望這是給有興趣入門但是非本科系的人看!
感謝 <(_ _)>
下一篇會介紹如何使用Node.js老牌的框架- Express
並且利用 Express Generator 產生專案
並且將資料庫的部分整合進去專案中
到時候會把code放上github
註: github是目前最多人用的線上版本控制的軟體原始碼代管服務